12月8日 JTAGとSWD | 您所在的位置:网站首页 › JTAG JLINK SWD › 12月8日 JTAGとSWD |
12月8日 JTAGとSWD
SWDって何?
JTAGは4本の線でICの内部回路と通信を行う汎用的なインタフェースです。内部回路と通信を行えるということは、CPUのデバッグにも使えるので、組み込みマイコンのデバッグ用インタフェースとして広がりを見せました。 しかし、信号線が4本必要になるということは小さなマイコンでは大きな問題となります。 32ピンや20ピン、8ピンくらいのマイコンにとっては4本ものI/Oがデバッグ用に使われてしまうということは大きなデメリットになります。 そこで、組み込みCPUの大手メーカーであるARM社は、Cortex用にSWD(Serial Wire Debug)という独自規格を定めました。 写真1 SWDの実例 IEEEも、一応、2本線でアクセスできるようにしたIEEE1149.7(Compact JTAG)という標準規格が定めました。IEEE1149.7とSWDは全く別物です。 SWDはよく使われているのに、cJTAGはほとんど使われていません。cJTAGのことは忘れてもいいくらいです。JTAG関連の規格では.1以外は驚くほど使われていないのです。 一方、ルネサスはFINEという1本線のデバッグプロトコルを策定しました。 SWDではバウンダリスキャンなどのJTAG本来の動作はできず、Cortexの中のデバッグ回路のレジスタに対して「32bitの値を書く」「32bitの値を読む」ということだけに特化した、独自のプロトコルになっています。 SWDの信号線SWDでは、TDIとTDOが削除され、TMSがTDIとTDOを兼ねたような双方向の信号になります。 表1 JTAGとSWDの信号線 JTAGの信号 SWDの信号 説明 TCK SWCLK クロックです TMS SWDIO TDIとTDOを兼ねたような双方向の信号になっています。 TDI なし SWDでは削除されました TDO なし SWDでは削除されました TRST なし
コネクタは1mmピッチの小さなピンヘッダが使われ、ピン配置は図1のようになっています。 図1 SWDのピン配置
SWDでは、TMSとTDIとTDOを時分割多重化してSWDIOという信号にして送ります。クロック信号はSWCLKと呼ぶようになります。 JTAGからSWDへの切り替えSWD/JTAG兼用のポートは電源投入直後はJTAGモードになっていて、SWDIOはTMSとして使われます。ここで、SWDIO(TMS)に特別なシーケンスを与えて、JTAGのTAPステートマシンを「ふつうはありえないような無意味な動かし方」をさせることで、SWDからJTAGに切り替えたり、逆にJTAGからSWDに切り替えたりするコマンド代わりに使っています。 具体的に言うと、 ① SWDIO(TMS)をHに保ったまま、50回以上のTCKパルスを与える ② SWDIO(TMS)に、0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1というシーケンスを与える ③ SWDIO(TMS)をHに保ったまま、50回以上のTCKパルスを与える 図2 SWDの書き込み波形
このシーケンスを実行したとき、①でJTAGのTAPコントローラはRESETステートに入ります。 ②のシーケンスではJTAGのステートマシンはRuntest/Idle→Select-DR-Scan→Select-IR-Scan→Test-Locig-Reset→Runtest/Idleをぐるぐる回るだけなので、結局のところ従来のJTAGデバイスに対して実行しても害はありません。 JTAG/SWD兼用のポートはこのシーケンスによってSWDに切り替わります。 SWDはどんなプロトコルなのかIEEE1149.7(cJTAG)では1ビットごとにTDI,TMS,TDOの3ビットをマルチプレクスして送るのですが、SWDではパケットベースのプロトコルになっていて、切り替えの回数が減っています。 SWD書き込み具体的には、ホストからターゲットに書き込むときには図3に示す波形となっています。 まず、ホストが8ビットのヘッダのようなものを送り、ターゲットからACKが返ってきたら、32bitのデータを送るというパケットになっています。APnDPのビットは、0ならばデバッグポートを操作し、1ならばアクセスポートを操作します。
図3 SWDの書き込み波形 SWD読み出しターゲットから読み出すときには図4に示す波形でやりとりします。もはやJTAGとは何の関係もないことがわかると思います。 図4 SWDの読み出し波形 デバッグポート・アクセスポートデバッグポートとアクセスポートというのは、Cortexの中にあるデバッグインタフェースです。つまり、SWDはJTAGのIRやDRというアクセスはせず、ARMのデバッグ専用のプロトコルとなっています。 SWDのバージョンSWDのプロトコルにはバージョン1とバージョン2があります。バージョン1では、デバッグアダプタとターゲットは1対1で接続しなければなりませんが、バージョン2では複数のターゲットをスター配線できるようになりました。このような接続をマルチドロップといいます。 図5 SWDバージョン1。1対1通信しかできない
図6 SWDバージョン2。複数のターゲットを接続できる で、結局SWDって何なの? SWDは、ARM社が定めたJTAGと共存可能な2線式のデバッグインタフェースです。JTAGとの互換性はなく、端子を共有しているだけにすぎません。特別なパターンをTMSに送ることでJTAGからSWDに切り替わります。 SWDのプロトコルは、ADI(ARM Debug Interface)v5とCoreSight用に特化されていて、ICの中に作られたデバッグポートやアクセスポートを通じて、レジスタに32bitの値を書き込んだり読み出したりする目的に特化されています。 デバッグ用のレジスタの機能はCoreSightの規格で定められていて、SWDはその物理層を担っているにすぎません。 12月7日[上のページ] |
CopyRight 2018-2019 实验室设备网 版权所有 |